/* ========================================================================= */
/* ------------------------------------------------------------------------- */
/*!
  \file			pgatomicchg.cc
  \date			Jun 2012
  \author		TNick

  \brief		Contains the implementation of AtomicChg class


*//*


 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Please read COPYING and README files in root folder
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/* ------------------------------------------------------------------------- */
/* ========================================================================= */
//
//
//
//
/*  INCLUDES    ------------------------------------------------------------ */

#include	<cpg/cpg.h>

#include	<usermsg.h>
#include	<cpg/logic/cpgdoc.h>
#include	<cpg/logic/pgspace.h>
#include	<cpg/preferences/prefs.h>

#include	"pgatomicchg.h"


/*  INCLUDES    ============================================================ */
//
//
//
//
/*  DEFINITIONS    --------------------------------------------------------- */

using namespace cpg;

/*  DEFINITIONS    ========================================================= */
//
//
//
//
/*  DATA    ---------------------------------------------------------------- */

/*  DATA    ================================================================ */
//
//
//
//
/*  CLASS    --------------------------------------------------------------- */

/* ------------------------------------------------------------------------- */
AtomicChg::AtomicChg	(  CpgDoc * doc, PgSpace * s )
	: BBlocks::AtomicChg()
{
	Q_ASSERT( doc != NULL );
	assoc_doc_ = doc;
	assoc_space_ = s;
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
AtomicChg::~AtomicChg	( void )
{
	/* stub */
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
void				AtomicChg::pushMe				( void )
{
	Q_ASSERT( assoc_doc_ != NULL );
	if ( Prefs::getI( Prefs::ATOMS_SHOW_LONG_TEXT ) == 0 )
	{
		setText( shortDescr() );
	}
	else
	{
		setText( longDescr() );
	}
	assoc_doc_->addUndoAtom( this );
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
void				AtomicChg::redo					( void )
{
	redoAtom();

	BBlocks::UserMsg um;
	quint32	do_echo = Prefs::getI( Prefs::ATOMS_ECHO );
	switch ( do_echo )	{
	case	1:		{
		um.add( BBlocks::UserMsgMgr::MSG_INFO,
				QObject::tr( "%1\n").arg( shortDescr() ) );
		break; }
	case	2:		{
		um.add( BBlocks::UserMsgMgr::MSG_INFO,
				QObject::tr( "%1\n").arg(
				longDescr()
				) );
		break; }
	default:
		return;
	}
	um.show();
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
void				AtomicChg::undo					( void )
{
	undoAtom();

	BBlocks::UserMsg um;
	quint32	do_echo = Prefs::getI( Prefs::ATOMS_ECHO );
	switch ( do_echo )	{
	case	1:		{
		um.add( BBlocks::UserMsgMgr::MSG_INFO,
				QObject::tr( "%1 has been undone.\n").arg( shortDescr() )
				);
		break; }
	case	2:		{
		um.add( BBlocks::UserMsgMgr::MSG_INFO,
				QObject::tr( "Action has been undone:\n%1\n")
				.arg( longDescr() )
				);
		break; }
	default:
		return;
	}
	um.show();
}
/* ========================================================================= */

/*  CLASS    =============================================================== */
//
//
//
//
/* ------------------------------------------------------------------------- */
/* ========================================================================= */
